/**********************************************************************************************/
/* Examples.h																				  */
/*                                                                       					  */
/* Copyright Paradigma, 1993-2004															  */
/* All Rights Reserved                                                   					  */
/**********************************************************************************************/

#ifndef _Examples_h_
#define _Examples_h_

// VSDK:
#include <VSDK/VSDK2.h>

// STD:
#include <iostream>


/**********************************************************************************************/
// For VSDK Example we open FBL and FBL::VSQL namespaces. 
//
FBL_Using_Namespace
VSQL_Using_Namespace
Std_Using_Namespace


#pragma mark -


/**********************************************************************************************/
// If this parameter is TRUE, then all examples work in client-server mode.
// for this you should have VServer running on localhost. Or you need change connection string
// in the Examples.cpp
//
// On default this falg is FALSE, i.e. we work with LOCAL database.
static bool				gClient;
static bool				gSSLEnable;

static I_Connection_Ptr gConn;


/**********************************************************************************************/
void				SQL_Execute( 
						VSQL::I_SqlDatabase_Ptr pSqlDB, 
						String query );

void				SQL_Execute( 
						VSQL::I_SqlDatabase_Ptr pSqlDB, 
						String query,
						ArrayOfValues_Ptr inBinds );

void				SQL_Select( 
						VSQL::I_SqlDatabase_Ptr pSqlDB, 
						String query );


/**********************************************************************************************/
void				InitValentina( );

void				InitValentina( 
						int inCacheSize );


/**********************************************************************************************/
FBL::I_Database_Ptr MakeNewDatabase( 
						EStorageType inType );

FBL::I_Database_Ptr MakeNewDatabase( );


/**********************************************************************************************/
VSQL::I_SqlDatabase_Ptr MakeNewSqlDatabase( 
						EStorageType inType );

VSQL::I_SqlDatabase_Ptr MakeNewSqlDatabase( );


/**********************************************************************************************/
void				CreateExampleDatabase( 
						FBL::I_Database_Ptr inDb,
						const char* inDbName );

void				CreateExampleDatabase( 
						FBL::I_Database_Ptr inDb );


/**********************************************************************************************/
void				OpenDatabase( 
						FBL::I_Database_Ptr inDb,
						const char* inDbName );

void				OpenDatabase( 
						FBL::I_Database_Ptr inDb );


/**********************************************************************************************/
I_Connection_Ptr	GetConnection();


/**********************************************************************************************/
void				ShutdownValentina();


/**********************************************************************************************/
// Delay example for user input in console.
//
void				Pause( void );
void				Wait ( void );

/**********************************************************************************************/
// Simple visualisation of a given table on cosole.
//
void				ViewTable( I_Table_Ptr inTable );
void				ViewSet( I_Table_Ptr inTable, BitSet_Ptr inSet );
void				ViewCursor( I_Cursor_Ptr inCursor );
 

/**********************************************************************************************/
#endif // _Examples_h_